(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=Fabian Filipczyk ( FFJaro@gmx.de)
Title=OFDb
Description=Online-Filmdatenbank (OFDb) import with small picture (DE)
Site=http://www.ofdb.de
Language=DE
Version=
Requires=3.5.0
Comments=
License=This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. |
GetInfo=1
[Options]
***************************************************)
program OFDB_DE;
var
MovieName: string;
function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
var
i: Integer;
begin
result := -1;
if StartAt < 0 then
StartAt := 0;
for i := StartAt to List.Count-1 do
if Pos(Pattern, List.GetString(i)) <> 0 then
begin
result := i;
Break;
end;
end;
///////////////////////////////////////////////////////////////////
procedure AnalyzePage(Address: string);
var
Page: TStringList;
LineNr: Integer;
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
// if pos('
OFDb - Suchergebnis', Page.Text) = 0 then
if pos('OFDb - Übersicht der Filmdaten ', Page.Text) > 0 then
begin
SetField(fieldURL, Address);
AnalyzeMoviePage(Page)
end else
begin
PickTreeClear;
LineNr := FindLine('Titel: ', Page, 0);
if LineNr > 0 then
begin PickTreeAdd('Filme :', '');
AddMoviesTitles(Page, LineNr);
if PickTreeExec(Address) then
AnalyzePage(Address);
end;
end;
Page.Free;
end;
procedure AnalyzeMoviePage(Page: TStringList);
var
TomString, Line, Temp, Value: string;
LineNr, IntValue: Integer;
BeginPos, EndPos: Integer;
begin
// Picture
//LineNr := FindLine('http://www.hsi-infopool.de/zensur/movies/images/film', Page, 0);
//http://www.ofdb.de/
//http://www.ofdb.de/images/film/0/179.jpg
//images/film/0/179.jpg
LineNr := FindLine('images/film/', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
BeginPos := pos('', Line) + 17;
EndPos := pos(' ', Line);
Value := copy(Line, BeginPos, EndPos - BeginPos);
SetField(fieldOriginalTitle, Value);
LineNr := Findline('sans-serif" size="3">', Page, 0);
if LineNr > -1 then
begin
Line:= Page.GetString(LineNr);
BeginPos := pos('sans-serif" size="3">',Line) +24;
Endpos := pos(' ',Line);
Value := copy(Line,BeginPos, Endpos-Beginpos);
SetField(fieldTranslatedTitle,Value);
end;
end;
//Country
LineNr := Findline('Herstellungsland:', Page, 0);
if LineNr > -1 then
begin
LineNr := LineNr+3;
Line:= Page.GetString(LineNr);
Delete(Line, 1, pos('',Line) +2;
Endpos := pos(' ',Line);
Value := copy(Line,BeginPos, Endpos-Beginpos);
SetField(fieldCountry, Value);
end;
// Year
LineNr := Findline('Erscheinungsjahr:', Page, 0);
if LineNr > -1 then
begin
LineNr := LineNr+3;
Line:= Page.GetString(LineNr);
Delete(Line, 1, pos('',Line) +2;
Endpos := pos(' ',Line);
Value := copy(Line,BeginPos, Endpos-Beginpos);
SetField(fieldYear, Value);
end;
// Category
LineNr := Findline('Genre(s):', Page, 0);
if LineNr > -1 then
begin
Value:= '';
LineNr := LineNr+2;
Line:= Page.GetString(LineNr);
repeat
Delete(Line, 1, pos('', Line);
if BeginPos > 0 then
begin
Delete(Line, 1, BeginPos +1 );
Temp := copy(Line, 1, pos(' ', Line)-1 );
Value:= Value+', '+ Temp ;
end;
until (BeginPos < 1);
Value:= copy(Value, 3,length(Value)-1);
SetField(fieldCategory, Value);
end;
// Actors
LineNr := Findline('Darsteller', Page, 0);
if LineNr > -1 then
begin
LineNr := LineNr+3;
Line:= Page.GetString(LineNr);
if pos('[mehr]', Line) > 0 then
begin
BeginPos := pos('[mehr] ',Line);
Value := copy(Line,BeginPos, Endpos-Beginpos);
GetActors(Value);
end else
begin
Value:= '';
repeat
Delete(Line, 1, pos('', Line);
if BeginPos > 0 then
begin
Delete(Line, 1, BeginPos +1 );
Temp := copy(Line, 1, pos(' ', Line)-1 );
Value:= Value+', '+ Temp ;
end;
until (BeginPos < 1);
Value:= copy(Value, 3,length(Value)-1);
SetField(fieldActors, Value);
end;
end;
//Director
LineNr := Findline('Regie', Page, 0);
if LineNr > -1 then
begin
Value:= '';
LineNr := LineNr+3;
Line:= Page.GetString(LineNr);
repeat
Delete(Line, 1, pos('', Line);
if BeginPos > 0 then
begin
Delete(Line, 1, BeginPos +1 );
Temp := copy(Line, 1, pos(' ', Line)-1 );
Value:= Value+', '+ Temp ;
end;
until (BeginPos < 1);
Value:= copy(Value, 3,length(Value)-1);
SetField(fieldDirector, Value);
end;
//Description
LineNr := Findline('Inhalt: ', Page, 0);
if LineNr > -1 then
begin
LineNr:=Findline('[mehr]', Line);
Value:=copy(Line, BeginPos, EndPos - BeginPos);
GetDescriptions(Value);
end;
//Rating
LineNr := Findline(' Note:', Page, 0);
if LineNr > -1 then
begin
Line:= Page.GetString(LineNr);
BeginPos := pos(' Note:',Line) +10;
EndPos:= pos(' ',Line);
Value := copy(Line,BeginPos, Endpos-Beginpos);
Value := IntToStr(Round(StrToInt(StrGet(Line, BeginPos), 0) + (StrToInt(StrGet(Line, BeginPos +3), 0) /10)));
SetField(fieldRating,Value );
end;
//DisplayResults;
end;
procedure GetActors(Address: string);
var
Line,Temp, Value: string;
LineNr: Integer;
BeginPos, EndPos: Integer;
Page: TStringList;
begin
Page := TStringList.Create;
Page.Text := GetPage('http://www.ofdb.de/'+Address);
LineNr := Findline('Darsteller', Page, 0);
if LineNr > -1 then
begin
Value:= '';
LineNr := LineNr+3;
Line:= Page.GetString(LineNr);
repeat
Delete(Line, 1, pos('', Line);
if BeginPos > 0 then
begin
Delete(Line, 1, BeginPos +1 );
Temp := copy(Line, 1, pos(' ', Line)-1 );
Value:= Value+', '+ Temp ;
end;
until (BeginPos < 1);
Value:= copy(Value, 3,length(Value)-1);
SetField(fieldActors, Value);
end;
Page.Free;
end;
procedure GetDescriptions(Address: string);
var
Line, Temp,Value: string;
LineNr: Integer;
BeginPos, EndPos: Integer;
Page: TStringList;
begin
Temp:= '';
Page := TStringList.Create;
Page.Text := GetPage('http://www.ofdb.de/' + Address);
LineNr := FindLine('Eine Inhaltsangabe von', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
BeginPos := pos(' ', Line) + 16;
while (pos(' ', Line) >0) do
begin
EndPos := pos(' ', Line);
Temp := Temp + copy(Line, BeginPos, EndPos - BeginPos);
LineNr:=LineNr+1;
Line:=Page.GetString(LineNr);
BeginPos:=1;
end;
EndPos := pos('', Line);
Temp:= Temp + copy(Line, BeginPos, EndPos - BeginPos);
Value:= Temp;
SetField(fieldDescription, Value);
end;
Page.Free;
end;
procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer);
var
Line: string;
MovieTitle, MovieAddress: string;
StartPos, EndPos: Integer;
begin
Line := Page.GetString(LineNr);
repeat
StartPos := pos(' 0 then
begin
Delete(Line, 1, StartPos + 8);
MovieAddress := copy(Line, 1, pos('''>', Line) - 1);
StartPos := pos('''>', Line) +2;
MovieTitle := copy(Line, StartPos, pos(' ', Line) - StartPos);
HTMLRemoveTags(MovieTitle);
PickTreeAdd(MovieTitle , 'http://www.ofdb.de/' + MovieAddress);
end;
until (StartPos < 1);
end;
begin
if CheckVersion(3,5,0) then
begin
MovieName := GetField(fieldOriginalTitle);
if MovieName = '' then
MovieName := GetField(fieldTranslatedTitle);
if Input('OFDb', 'Bitte Titel eingeben :', MovieName) then
begin
AnalyzePage('http://www.ofdb.de/view.php?page=suchergebnis&SText='+UrlEncode(MovieName)+'&Kat=All');
end;
end else
ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
end.